/**
 * OKR 相关的 TypeScript 类型定义
 */

// OKR 节点类型枚举
export const OKRNodeType = {
  DEPARTMENT: 'department',    // 部门目标
  TEAM: 'team',               // 团队目标
  INDIVIDUAL: 'individual'    // 个人目标
} as const;

export type OKRNodeType = typeof OKRNodeType[keyof typeof OKRNodeType];

// OKR 进度状态枚举
export const OKRStatus = {
  NOT_STARTED: 'not_started', // 未开始
  IN_PROGRESS: 'in_progress', // 进行中
  COMPLETED: 'completed',     // 已完成
  OVERDUE: 'overdue'         // 已逾期
} as const;

export type OKRStatus = typeof OKRStatus[keyof typeof OKRStatus];

// 关键结果接口
export interface KeyResult {
  id: string;                  // 关键结果唯一标识
  title: string;               // 关键结果标题
  description: string;         // 关键结果描述
  targetValue: number;         // 目标值
  currentValue: number;        // 当前值
  unit: string;               // 单位 (如: %, 个, 次)
  progress: number;           // 进度百分比 (0-100)
  status: OKRStatus;          // 状态
  deadline: string;           // 截止日期
  createdAt: string;          // 创建时间
  updatedAt: string;          // 更新时间
}

// OKR 节点接口
export interface OKRNode {
  id: string;                 // 节点唯一标识
  title: string;              // 目标标题
  description: string;        // 目标描述
  type: OKRNodeType;         // 节点类型
  parentId?: string;         // 父节点ID (顶级节点为空)
  children: string[];        // 子节点ID数组
  keyResults: KeyResult[];   // 关键结果列表
  progress: number;          // 整体进度 (0-100)
  status: OKRStatus;         // 状态
  owner: {                   // 负责人信息
    id: string;
    name: string;
    avatar?: string;
    department?: string;
  };
  quarter: string;           // 所属季度 (如: "2024Q1")
  startDate: string;         // 开始日期
  endDate: string;           // 结束日期
  createdAt: string;         // 创建时间
  updatedAt: string;         // 更新时间
  level: number;             // 层级深度 (0为根节点)
}

// OKR 树状态接口
export interface OKRState {
  nodes: Record<string, OKRNode>;  // 所有节点的映射表
  rootNodes: string[];             // 根节点ID数组
  selectedNodeId?: string;         // 当前选中的节点ID
  hoveredNodeId?: string;          // 当前悬浮的节点ID
  collapsedNodes: string[];        // 折叠的节点ID数组
  loading: boolean;                // 加载状态
  error?: string;                  // 错误信息
  quarters: string[];              // 可用的季度列表
  currentQuarter: string;          // 当前显示的季度
}

// API 响应接口
export interface OKRApiResponse<T = any> {
  success: boolean;
  data: T;
  message?: string;
  code?: string;
}

// 创建/更新 OKR 节点的请求参数
export interface CreateOKRNodeRequest {
  title: string;
  description: string;
  type: OKRNodeType;
  parentId?: string;
  ownerId: string;
  quarter: string;
  startDate: string;
  endDate: string;
  keyResults?: Omit<KeyResult, 'id' | 'createdAt' | 'updatedAt'>[];
}

// 更新关键结果进度的请求参数
export interface UpdateKeyResultRequest {
  nodeId: string;
  keyResultId: string;
  currentValue: number;
  status?: OKRStatus;
}
